Long-term mortality of academy award winning actors and actresses

Background Social status gradients are powerful health determinants for individuals living in poverty. We tested whether winning an Academy award (Oscar) for acting was associated with long-term survival. Methods We conducted a longitudinal cohort analysis of all actors and actresses nominated for an Academy award in a leading or a supporting role. For each, a control was identified based on age, sex, and co-staring in the same film. Results Overall, 2,111 individuals were analyzed with 1,122 total deaths occurring during a median follow-up of 68.8 years. Comparisons of winners to controls yielded a 4.8% relative difference average life-span (95% confidence interval: 1.6 to 7.9, p = 0.004), a 5.1 year absolute increase in life expectancy (95% confidence interval: 3.0 to 7.2, p < 0.001), and a 41% improvement in mortality hazard (95% confidence interval: 19 to 68, p < 0.001). The increased survival tended to be greater in recent years, for individuals winning at a younger age, and among those with multiple wins. The increased survival replicated in secondary analyses comparing winners to nominees and was not observed in analyses comparing nominees to controls. Conclusions Academy award winning actors and actresses show a positive association between success and survival, suggesting the importance of behavioral, psychological, or other modifiable health factors unrelated to poverty.

1 Technical Appendix OVERVIEW The purpose of this appendix is to provide an §1) overview of the analysis, §2) specific additional results, §3) core Python codes for multistate modeling, and §4) SAS codes for the validation analysis. This material is intended as background technical information for readers interested in further background on our analyses on the longevity of Oscar winning actors. In addition, readers are referred to the GitHub resource for more details on multistate modeling (https://meter1.readthedocs.io/en/latest/installation.html).

§3) Core Python Codes of Multistate Modeling
The first file is named PreliminaryDataCleanup and is intended to address performers who made more than one transition in a year (for example, first being nominated and first winning in the same year). In such cases, the person is classified by final state. An additional nuance is to computer each person's age at each transition based on the year of birth and year of transition.
Keep in mind the coding shows the specific computer path and would need to be tailored for each programmer individually.
The second file is named MultiStateLifeTable and contains the core functions and subroutines.
This name must not be changed since the details are called upon in later programs. The core features include creating the number of people at-risk at each transition (denominator) and the number of people making a transition at the corresponding age (numerator). This allows calculating a transition probability at each year (numerator / denominator). This also allows calculating a survivorship vector (membership of each group at each stage). Additional coding relates to transposing the data into a longitudinal format to allow calculation. Additional coding involves censoring individuals at corresponding stage (for example, transitioning from a nominee to a winner). Some final features involving exporting data for plotting and other analyses.
The third file is named WinnerVsNonWinnerMSM and contains much of the comparative analyses to contrast different groups. This name must not be changed because the details are called for later programs. The core features include using functions from the MultiStateLifeTable file to compare winners to non-winners. Incidentally, the group of non-winners can also be decomposed into the group of nominees and group of controls. This also introduces the bootstrap coding for calculating 95% confidence intervals around estimates. An additional set of codes is   Tables. The critical functions are: ### atrisk_and_transitions, transitionprobs_and_samplesizes, survivorship_vector, and life_expectancy. atrisk_and_transitions ### records the risk sets at every given age, which corresponds to the number of people in each of the states at every given age. ### It also records the number of performers who transition from any given state to any other state at a given age. ### transitionprobs_and_samplesizes uses the output of this function to compute the transition probabilities at every age ### and also records the associated sample sizes. survivorship_vector takes a radix, a vector representing the initial ### distribution of individuals over states to make predictions for, and an initial age, and outputs the expected ### evolution of that set of individuals over time.
def allowed_transitions(states): # INPUTS # "states": a python list with the set of states in a given model (eg. ["Person", "Performer", "Nominee", "Dead"]) # this function takes a set of states and uses it to compute the allowed transitions # it assumes the model is acyclic ie. individuals can only transition towards states # to the right of it in the list lst = [] for i in range(0, len(states)): for j in range(i+1, len(states)): lst.append( [i, j]) return lst def df_to_list(data): # INPUTS # "data": a pandas dataframe (eg. the original data imported using the pd.read_csv function) row_list = [] # want to convert data to python lists to speed up computation for i in range((data.shape[0])): row_list.append(list(data.iloc [i, :])) return row_list def atrisk_and_transitions (transition_ages, states, transition_statuses, data, allowable_transitions, row_list): # A function to get the number of individuals in a given state at a given age, and # number of transitions at each age. # INPUTS # "states": a python list with the set of states in a given model (eg. ["Person", "Performer", "Nominee", "Dead"]) # "transition_ages": a dictionary matching each state to a column in the data set showing what age the performer reaches the state at # (eg. {"person": "age at birth", "performer": "age of first film", "nominee": "age of nomination", "dead": "age at death"}) # "transition_statuses": a dictionary matching each state to a column in the data set showing whether a performer ever reached a state # {"person": 'birth status', "performer": "first film status", "nominee": "age of nomination", "dead": "death status"} # "data": the data in expanded format with one performer per rowthis file is the output from datacleanup # "  [i,i] = stay_prob return [transmat, samplesizes] def transitionsexport(transmat, samplesizes, states): # INPUTS # "transmat": a list of matrices that represent the transition probabilities at each age. This is the first output from # transitionprobs_and_samplesizes # "samplesizes": a list of matrices with each of the sample sizes corresponding to each of the probabilities. This is the # second output from transitionprobs_and_samplesizes # "states": a python list with the set of states in a given model (eg. ["Person", "Performer", "Nominee", "Dead"]) allowable_transitions = allowed_transitions(states) for i in range(0, len(states)- rows.append(row) column_names.append("sample size") statdf = pd.DataFrame(rows, columns=column_names) statdf.index.name = "age" statdf.to_csv ("C:/Users/NEVET/Desktop/Stars/python/" + states [i] + "_transitions.csv") def survivorship_vector(transmat, radix, initial_age, states): # INPUTS # "transmat": a list of numpy matrices that represent the transition probabilities at each age. This is the first output from # transitionprobs_and_samplesizes # "radix": an initial condition for the number of performers in each state we want to model, specified as a numpy vector.
# this is precisely the output of survivorship_vector # "name": the name of the file (with extension) that you want to output survdf.to_csv("C:/Users/NEVET/Desktop/Stars/python/" + name) def survivorship_graph(survdf, states, order, colors): # INPUTS # "survdf": a dataframe containing the given probabilities of being in each state at each age for some initial condition.